

#include "Triangulo.h"



Triangulo::Triangulo(Vertice* prim, Vertice* seg, Vertice* ter){
	v1 = prim;
	v2 = seg;
	v3 = ter;
}

Triangulo::Triangulo(){
	v1 = new Vertice();
	v2 = new Vertice();
	v3 = new Vertice();
}

Triangulo::Triangulo(const Triangulo &t){
    v1 = t.v1;
    v2 = t.v2;
    v3 = t.v3;
    I = t.I;
    vNormal1 = t.vNormal1;
    vNormal2 = t.vNormal2;
    ID = t.ID;
	vVecinos = t.vVecinos;
	blnvisible = t.blnvisible;
	ecPlano = t.ecPlano;
}


void Triangulo::CalcularNormal()
{
	Vector vector1;
	Vector vector2;

	vector1.setX(v1->getX()-v2->getX());
	vector1.setY(v1->getY()-v2->getY());
	vector1.setZ(v1->getZ()-v2->getZ());

	vector2.setX(v2->getX()-v3->getX());
	vector2.setY(v2->getY()-v3->getY());
	vector2.setZ(v2->getZ()-v3->getZ());

	vNormal1 = ProductoCruz(vector1,vector2);
	vNormal1.ConvVectorUnitario();
	vNormal2 = ProductoCruz(vector2,vector1);
	vNormal2.ConvVectorUnitario();
}

void Triangulo::CalcularEcuacionPlano()
{
	double a, b, c, d;

	a = v1->getY()*(v2->getZ()-v3->getZ())+v2->getY()*(v3->getZ()-v1->getZ())
		+v3->getY()*(v1->getZ()-v2->getZ());
	b = v1->getZ()*(v2->getX()-v3->getX())+v2->getZ()*(v3->getX()-v1->getX())
		+v3->getZ()*(v1->getX()-v2->getX());
	c = v1->getX()*(v2->getY()-v3->getY())+v2->getX()*(v3->getY()-v1->getY())
		+v3->getX()*(v1->getY()-v2->getY());
	d = -(v1->getX()*(v2->getY()*v3->getZ()-v3->getY()*v2->getZ())+
		v2->getX()*(v3->getY()*v1->getZ()-v1->getY()*v3->getZ())+
		v3->getX()*(v1->getY()*v2->getZ()-v2->getY()*v1->getZ()));

	ecPlano.setA(a);
	ecPlano.setB(b);
	ecPlano.setC(c);
	ecPlano.setD(d);
}

void Triangulo::IncializarVecinos()
{
	for(int i=0;i<3;i++)
	{
		vVecinos.push_back(0);
	}
}


int Triangulo::getOneIndice(int pos)
{
	if(pos == 0)
	{
		return I.getIndice1();
	}
	else if(pos == 1)
	{
		return I.getIndice2();
	}
	else if(pos == 2)
	{
		return I.getIndice3();
	}
}
    

    
